/**
 * 汇率工具
 * 支持获取USDT/CNY汇率
 */

// 汇率缓存（5分钟过期）
let cachedRate: { rate: number; timestamp: number } | null = null
const CACHE_DURATION = 5 * 60 * 1000 // 5分钟

/**
 * 获取USDT/CNY汇率
 * 使用多个免费API作为备选方案
 */
export async function getUSDTToCNYRate(): Promise<number> {
  // 检查缓存
  if (cachedRate && Date.now() - cachedRate.timestamp < CACHE_DURATION) {
    return cachedRate.rate
  }

  // 尝试多个API源
  const apis = [
    // API 1: CoinGecko (免费，无需API key)
    async () => {
      try {
        const response = await fetch('https://api.coingecko.com/api/v3/simple/price?ids=tether&vs_currencies=cny')
        const data = await response.json()
        if (data.tether?.cny) {
          return data.tether.cny
        }
      } catch (error) {
        console.warn('CoinGecko API失败:', error)
      }
      return null
    },
    
    // API 2: 直接使用USD/CNY汇率（USDT通常锚定USD）
    async () => {
      try {
        // 获取USD/CNY汇率
        const cnyResponse = await fetch('https://api.exchangerate-api.com/v4/latest/USD')
        const cnyData = await cnyResponse.json()
        const usdToCny = cnyData.rates?.CNY || 7.2
        
        // USDT通常锚定USD，所以直接使用USD/CNY汇率
        return usdToCny
      } catch (error) {
        console.warn('汇率API失败:', error)
      }
      return null
    },
    
    // API 3: 备用方案 - 使用固定汇率（如果所有API都失败）
    async () => {
      console.warn('所有汇率API失败，使用默认汇率 7.2')
      return 7.2
    }
  ]

  // 依次尝试各个API
  for (const api of apis) {
    try {
      const rate = await api()
      if (rate && rate > 0) {
        // 缓存汇率
        cachedRate = {
          rate,
          timestamp: Date.now()
        }
        return rate
      }
    } catch (error) {
      console.warn('获取汇率失败:', error)
      continue
    }
  }

  // 如果所有API都失败，返回默认汇率
  const defaultRate = 7.2
  cachedRate = {
    rate: defaultRate,
    timestamp: Date.now()
  }
  return defaultRate
}

/**
 * 清除汇率缓存
 */
export function clearRateCache() {
  cachedRate = null
}

/**
 * USDT转人民币
 */
export function usdtToCny(usdt: number, rate?: number): number {
  if (!rate) {
    // 如果没有提供汇率，使用缓存或默认值
    const currentRate = cachedRate?.rate || 7.2
    return usdt * currentRate
  }
  return usdt * rate
}

/**
 * 人民币转USDT
 */
export function cnyToUsdt(cny: number, rate?: number): number {
  if (!rate) {
    // 如果没有提供汇率，使用缓存或默认值
    const currentRate = cachedRate?.rate || 7.2
    return cny / currentRate
  }
  return cny / rate
}

